//动态初始化一个数组， 可以将该数组进行缩减，提示用户是否继续缩减，且可以指定元素进行删除。
//当只剩下最后一个元素，提示，不能再缩减
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner myscanner = new Scanner(System.in);
        int target = 0;//要删减的元素
        int index = -1;//添加索引，便于if语句的使用，使用了顺序查找
        int elementNum = 0;//数组元素大小
        System.out.println("请输入数组元素大小");
        elementNum = myscanner.nextInt();
        System.out.println("输入数组元素");
        int[] arr = new int[elementNum];

        for(int i = 0; i < arr.length; ++i) {
            arr[i] = myscanner.nextInt();
        }

        String ways;
        do {
            System.out.println("是否缩减 (yes/no)");
            ways = myscanner.next();
            if (!ways.equalsIgnoreCase("no") && !ways.equalsIgnoreCase("yes")) {
                System.out.println("输入错误，请重新输入");//排除非法输入
            } else {
                if (ways.equalsIgnoreCase("no")) {
                    break;
                }

                if (arr.length == 1) {
                    System.out.println("无法继续缩减");
                    break;//当只剩后一个时，终止缩减元素
                }

                System.out.println("\n");
                System.out.println("请输入要删减的数");
                target = myscanner.nextInt();

                //顺序查找
                for(int i=0;i<arr.length;i++){
                    if(arr[i]==target){
                        index = i;
                        break;//说明找到了要删除的元素，立即终止，并记住索引
                    }
                }

                if(index==-1){
                    System.out.println("输入错误，你所输入的元素不在该数组中,请重新输入！");
                    continue;
                }

                //删除元素
                //1.创建一个新数组
                //2.遍历原数组，找到要删除的元素，将其后面的元素向前移动
                //3.将新数组赋值给原数组

                if (index != -1) {//代码在此处时不好理解的，这里只有具备删除元素的条件时，才会执行下面的代码
                    //好比商店中的工作人员检查食品时候过期，这时有两个货柜，一个是旧的，一个是新的，工作人员需要从旧的货柜中挑选出
                    //合格的商品放入新的货柜，而旧的则丢掉，现在旧的货柜是arr，新的是arr2。
                    //现在有两个工作人员，一个是i，一个是j，i是负责遍历旧的货柜，j是负责遍历新的货柜，
                    int[] arr2 = new int[arr.length - 1];
                    for(int j = 0,i=0; i < arr.length; ++i) {
                        if (i != index) {//此处是判断当前不是过期食品
                            arr2[j++] = arr[i];//把就货架的商品放到新货架上，然后新货架的工作人员(j)向前走一步（准备接受下一个）
                            //注意：此处是j++，是先使用再++，而不是先++在使用。
                        }
                        //若果是目标位置，i继续走，j不动（跳过此商品）
                    }

                    arr = arr2;//用新货柜替换旧的
                    System.out.println("===缩减后的数组===");
                    for(int k = 0; k < arr.length; ++k) {
                        System.out.print(arr[k] + "\t");
                    }
                }
            }
        } while(true);

        myscanner.close();
        System.out.println("程序结束");
    }
}
//这一个功能现阶段实现有一点难度，在制作过程中也问了很多次deepseek来理解代码，对于前面的指定最后一个元素删除有些区别，就这微小的区别，都会导致所写的代码逻辑混乱
//通过这次改善代码，也意识到编程水平还有待提高